import type { NextRequest } from "next/server"; import { paymentCertificationCommandSchema, paymentProviderReferenceSchema, } from "@salixcommerce/core"; import { CART_CAPABILITY_COOKIE, hashCartCapability, parseCartCapability, } from "@/server/commerce/capability"; import { errorResponse, validateJsonMutationRequest } from "@/server/commerce/http"; import { paymentResultResponse } from "@/server/payments/http"; import { paymentService } from "@/server/payments/payments"; export const runtime = "nodejs"; export async function POST( request: NextRequest, context: RouteContext<"/api/payments/[reference]/simulate">, ) { const requestGate = validateJsonMutationRequest(request); if (!requestGate.ok) return requestGate.response; const [body, routeParams] = await Promise.all([readJson(request), context.params]); const parsedBody = paymentCertificationCommandSchema.safeParse(body); const parsedReference = paymentProviderReferenceSchema.safeParse(routeParams.reference); if (!parsedBody.success || !parsedReference.success) { return errorResponse("INVALID_REQUEST", "Invalid fake payment request.", 400); } const capability = parseCartCapability(request.cookies.get(CART_CAPABILITY_COOKIE)?.value); if (capability === null) return errorResponse("PAYMENT_NOT_FOUND", "Payment not found.", 404); return paymentResultResponse( await paymentService.simulateCertificationEvent({ capabilityHash: hashCartCapability(capability), command: parsedBody.data, providerPaymentReference: parsedReference.data, }), ); } async function readJson(request: NextRequest): Promise { try { return await request.json(); } catch { return undefined; } }